package com.OrderingSystem.controller.buyer;

import com.OrderingSystem.pojo.ProductCategory;
import com.OrderingSystem.pojo.ProductInfo;
import com.OrderingSystem.service.IProductInfoService;
import com.OrderingSystem.service.ProductCategoryService;
import com.OrderingSystem.vo.ProductInfoVO;
import com.OrderingSystem.vo.ProductVO;
import com.OrderingSystem.vo.ResultVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

@RestController
@RequestMapping("/sell")
public class BuyerProductInfoController {

    @Autowired
    ProductCategoryService productCategoryService;

    @Autowired
    IProductInfoService productInfoService;

    @Autowired
    RedisTemplate redisTemplate;

    @GetMapping("/buyer/product/list")
    public ResultVO<Object> list() {

        // 先从redis中获取数据
        List<ProductVO> productVOList = (List<ProductVO>) redisTemplate.opsForValue().get("productVOList");
        if(productVOList != null){
            return new ResultVO<>(0, "成功", productVOList);
        }

        productVOList = new ArrayList<>();
        // 查询所有的上架餐品信息
        List<ProductInfo> productInfoList = productInfoService.list();
        // 获取已有餐品的所有的类别ID，因为有的类别没有餐品，在集合中的类别ID都是有餐品的
        Set<Integer> categoryTypeSet = productInfoList.stream().map(ProductInfo::getCategoryType).collect(Collectors.toSet());
        // 查询所有的上架餐品类别信息
        List<ProductCategory> productCategoryList = productCategoryService.list();
        for(ProductCategory productCategory : productCategoryList){
            List<ProductInfoVO> productInfoVOList = new ArrayList<>();
            if(categoryTypeSet.contains(productCategory.getCategoryId())){
                ProductVO productVO = new ProductVO();
                productVO.setCategoryName(productCategory.getCategoryName());
                productVO.setCategoryType(productCategory.getCategoryId());
                for(ProductInfo productInfo : productInfoList){
                    if(productInfo.getCategoryType().equals(productCategory.getCategoryId())){
                        ProductInfoVO productInfoVO = new ProductInfoVO();
                        productInfoVO.setProductId(productInfo.getProductId().toString());
                        productInfoVO.setProductName(productInfo.getProductName());
                        productInfoVO.setProductPrice(productInfo.getProductPrice());
                        productInfoVO.setProductDescription(productInfo.getProductDescription());
                        productInfoVO.setProductIcon(productInfo.getProductIcon());
                        productInfoVOList.add(productInfoVO);
                    }
                }
                productVO.setProductInfoVOList(productInfoVOList);
                productVOList.add(productVO);
            }
        }
        // 把数据放到redis中
        redisTemplate.opsForValue().set("productVOList", productVOList);
        return new ResultVO<>(0, "成功", productVOList);
    }

}
